home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagd_f.zip / EGAVGA.SWG / 0049_Dispaly PIC,PCX,SCI,GIF.pas < prev    next >
Pascal/Delphi Source File  |  1993-05-30  |  8KB  |  331 lines

  1. {
  2. >Does anyone know of any way to display a single screen of Graphics on EGA
  3. >640x350 mode *quickly*.  It can be VGA as well; I'm just trying to display t
  4. >screen *fast* from a disk File.  I know, I could have used the GIF or PCX
  5.  
  6. This would restore a .PIC format File, uncompressed, For 320x200x256
  7. mode $13, With a prepended 256*3 Byte palette entry header.  It should
  8. work- I just wrote this code yesterday to display some unknown .PIC
  9. Files.
  10. }
  11.  
  12. Program dispic;
  13. Const
  14.   maxpicsize = 320*200;
  15. Type
  16.   pbuf = ^abuf;
  17.   abuf=Array[1..maxPICSIZE] of Byte;
  18.   palbuf = ^apalbuf;
  19.   apalbuf=Array[1..256*3] of Byte;
  20.   headerbuf=^aheaderbuf;
  21.   aheaderbuf=Array[1..32] of Byte;
  22. Var
  23.   f : File;
  24.   i : Byte;
  25.   buf : pbuf;
  26.   pal : palbuf;
  27.   header : headerbuf;
  28.   hsize,vsize,picsize,headersize,palettesize:Word;
  29.   _r,_g,_b,
  30.   cr : Byte;
  31.   nr,ctr : Word;
  32.   fs,overflow : LongInt;
  33.   Filename : String;
  34.  
  35.  
  36. Procedure setcolreg(p:Pointer;start,num:Word);
  37. begin
  38.   Asm
  39.     mov  ah,10h
  40.     mov  al,12h           { seg block of color Registers }
  41.     mov  bx,start
  42.     mov  cx,num
  43.     mov  dx,Word ptr p+2  { get high Word of p (seg) }
  44.     mov  es,dx
  45.     mov  dx,Word ptr p    { get low Word of p (ofs) }
  46.     int  $10
  47.   end;
  48. end;
  49.  
  50. Procedure stop(s:String);
  51. begin
  52.   Writeln(s);
  53.   halt;
  54. end;
  55.  
  56. begin
  57.   Writeln('DISPIC v0.01ß (c)1993 Brian Pape/Jagaer Technologies'+#10#13);
  58.   Writeln(maxavail,' Bytes available.');
  59.   if paramcount < 1 then
  60.     stop('no .PIC File specified.');
  61.   Filename := paramstr(1);
  62.   assign(f,Filename);
  63.   {$I-} reset(f,1); {$I+}
  64.   if ioresult <> 0 then
  65.     begin
  66.       Writeln('File '+Filename+' not found.');
  67.       halt;
  68.     end;
  69.   new(header);
  70.   Writeln(maxavail,' Bytes available after header allocate.');
  71.   palettesize := sizeof(pal^);
  72.   headersize := sizeof(header^);
  73.  
  74.   if Filesize(f) < headersize+palettesize then stop('invalid .pic File.');
  75.  
  76.   blockread(f,header^,headersize,nr);
  77.   if nr < sizeof(headersize) then
  78.     stop('insufficient header information.')
  79.   else
  80.     Writeln('header: ',nr,' Bytes read.');
  81.   hsize := (Word(header^[4]) shl 8) or header^[3];
  82.   vsize := (Word(header^[6]) shl 8) or header^[5];
  83.  
  84.   picsize := (Word(header^[14]) shl 8) or header^[13];
  85.   Writeln('picsize: ',picsize,' Bytes.');
  86.   if picsize > maxpicsize then
  87.     begin
  88.       picsize := maxpicsize;
  89.       Writeln('picture size read overflow. resetting to maxpicsize.');
  90.     end;
  91.  
  92.   dispose(header);
  93.   new(pal);
  94.   Writeln(maxavail,' Bytes available after palette allocate.');
  95.  
  96.   blockread(f,pal^,palettesize,nr);
  97.   if nr < palettesize then
  98.     stop('insufficient palette information.')
  99.   else
  100.     Writeln('palette: ',nr,' Bytes read.');
  101.  
  102.   new(buf);
  103.   Writeln(maxavail,' Bytes available after buffer allocate.');
  104.   {$I-} blockread(f,buf^,sizeof(buf^),nr); {$I+}
  105.   if ioresult <> 0 then;
  106.   Writeln('picture: ',nr,' Bytes read.');
  107.   Writeln('hsize: ',hsize);
  108.   Writeln('vsize: ',vsize);
  109.   Writeln('press enter.');
  110.   readln;
  111.   close(f);
  112.   Asm
  113.     mov ah,00
  114.     mov al,$13
  115.     int $10
  116.   end;
  117.   move(buf^,ptr($a000,0)^,nr);
  118.  
  119.   setcolreg(pal,0,256);
  120.  
  121.   dispose(buf);
  122.   dispose(pal);
  123.   readln;
  124.   Asm
  125.     mov ah,00
  126.     mov al,03
  127.     int $10
  128.   end;
  129. end.
  130.  
  131. {
  132. > Hello is somebody there that knows how to use pictures that I
  133. > made in Deluxe paint (.lbm)
  134.  
  135. First, convert the LBM File to a SCI using For instance VPIC.
  136. I assume you are using VGA/MCGA 320x200x256.. In Case you don't,
  137. this won't work...:
  138. }
  139. Uses
  140.   Crt;
  141. Var
  142.   SCIFile : File;
  143.   r, g, b : Byte;
  144.   i       : Integer;
  145.   VideoM  : Byte Absolute $A000:0000;
  146. begin
  147.   Asm
  148.     mov ax,0013h
  149.     int 10h
  150.   end;
  151.  
  152.   Assign(SCIFile, 'MYSCI.SCI');   { Put your own Filename there }
  153.   Reset(SCIFile, 1);
  154.  
  155.   For i := 0 to 255 do begin
  156.     Port[$3C8] := i;
  157.     BlockRead(SCIFile,r,1);
  158.     BlockRead(SCIFile,g,1);
  159.     BlockRead(SCIFile,b,1);
  160.     Port[$3C9] := r;
  161.     Port[$3C9] := g;
  162.     Port[$3C9] := b;              { Set palette }
  163.    end;
  164.  
  165.   BlockRead(SCIFile,VideoM,64000);
  166.   Repeat Until Port[$60] = 1;     { Wait For ESC }
  167.  
  168.   Asm
  169.     mov ax,0003h
  170.     int 10h
  171.   end;
  172. end.
  173.  
  174. {
  175. > I am looking to create a simple utility to report the size, color, etc
  176. > of GIFs.
  177. }
  178.  
  179. Program GI;
  180. Uses
  181.   Dos;
  182.  
  183. Procedure ExtractGIFInfo (Name : String);
  184.  
  185. Const
  186.   ColorRez : Array[1..8] of Byte=(1,3,7,15,31,63,127,255);
  187.  
  188. Type
  189.   GifSigRec = Array[1..6] of Char;
  190.  
  191.   ScreenDiscRec = Record
  192.     Width,
  193.     Height:Word;
  194.     GenInfo:Byte;
  195.   end;
  196.  
  197. Var
  198.   F       : File;
  199.   Sig     : GIFSigRec;
  200.   Screen  : ScreenDiscRec;
  201.   Result  : Word;
  202.   Diver,
  203.   X       : Byte;
  204.   Y       : LongInt;
  205.   DirInfo : SearchRec;
  206.   Ratio   : Byte;
  207.   Res     : Word;
  208.   RReal   : Real;
  209.  
  210. begin
  211.   Assign(F, Name);
  212.   Reset(F, 1);
  213.   BlockRead(F, Sig, SizeOF(Sig), Result);
  214.   BlockRead(F, Screen, SizeOf(Screen), Result);
  215.   Close(F);
  216.  
  217.   If (Sig[1] + Sig[2] + Sig[3] <> 'GIF') Then
  218.   begin
  219.     WriteLn('Not a Valid .GIF File!');
  220.     Exit;
  221.   end;
  222.  
  223.   For X := 1 to 6 do
  224.     Write(Sig[X]);
  225.   Write(', ', Screen.Width, 'x', Screen.Height, 'x');
  226.   Screen.GenInfo := (Screen.GenInfo and 7) + 1;
  227.   Res := ColorRez[Screen.GenInfo] + 1;
  228.   WriteLn(Res);
  229. end;
  230.  
  231. Var
  232.   Count : Byte;
  233. begin
  234.   If ParamCount >= 1 then
  235.     For Count := 1 to ParamCount do
  236.       ExtractGIFInfo (ParamStr(Count))
  237.   else
  238.     WriteLn(' Use a Filename geek!');
  239. end.
  240. Had the PCX info:
  241.  
  242. ZSoft .PCX File HEADER ForMAT
  243.  
  244. Byte Item         Size Description/Comments
  245.  
  246. 0    Manufacturer  1    Constant Flag, 10 = ZSoft .pcx
  247.  
  248. 1    Version       1    Version inFormation
  249.             0 = Version 2.5 of PC Paintbrush
  250.             2 = Version 2.8 w/palette inFormation
  251.             3 = Version 2.8 w/o palette inFormation
  252.             4 = PC Paintbrush For Windows(Plus For Windows
  253.                 Uses Ver 5)
  254.             5 = Version 3.0 and > of PC Paintbrush and
  255.                 PC Paintbrush +, includes Publisher's Paintbrush
  256.  
  257. 2    Encoding       1   1 = .PCX run length encoding
  258.  
  259. 3    BitsPerPixel   1   Number of bits to represent a pixel (per
  260.                                 Plane)- 1, 2, 4, or 8
  261.  
  262. 4    Window         8   Image Dimensions: Xmin,Ymin,Xmax,Ymax
  263.  
  264. 12   HDpi           2   Horizontal Resolution of image in DPI*
  265.  
  266. 14   VDpi           2   Vertical Resolution of image in DPI*
  267.  
  268. 16   Colormap       48  Color palette setting, see Text
  269.  
  270. 64   Reserved       1   Should be set to 0.
  271.  
  272. 65   NPlanes        1   Number of color planes
  273.  
  274. 66   BytesPerLine   2   Number of Bytes to allocate For a scanline
  275.                         plane.  MUST be an EVEN number.  Do not
  276.                         calculate from Xmax-Xmin.
  277.  
  278. 68   PaletteInfo    2   How to interpret palette- 1 = Color/BW, 2 =
  279.                                 Grayscale (ignored in PB IV/ IV +)
  280.  
  281. 70   HscreenSize    2   Horizontal screen size in pixels.
  282.  
  283. New field found only in PB IV/IV Plus
  284.  
  285. 72   VscreenSize    2   Vertical screen size in pixels.
  286.  
  287. New field found only in PB IV/IV Plus
  288.  
  289. 74   Filler         54  Blank to fill out 128 Byte header.  Set all
  290.                         Bytes to 0
  291.  
  292. notES:
  293.  
  294. All sizes are measured in ByteS.
  295.  
  296. All Variables of SIZE 2 are Integers.
  297.  
  298. *HDpi and VDpi represent the Horizontal and Vertical resolutions
  299. which the image was created (either Printer or scanner); i.e. an
  300. image which was scanned might have 300 and 300 in each of these
  301. fields.
  302. {
  303. > Does anyone have the format structure For PCX format? I had it
  304. > once but I lost it... It had a header (big surprise), and used
  305. > run-length compression (HAHAHAHAHA!!!!), but it seems the easiest major
  306. > format to code.
  307.  
  308.   Here's the header, I haven't fooled much With coding/decoding PCX
  309. but if I remember right (At least For 256c images) the run
  310. length-Byte is up to 64 since the most-significant bits signify the
  311. end of a line in the image.  And in 256c images, the last 768 Bytes
  312. should be the palette.
  313. }
  314.  
  315. PCXHeader   =  Record
  316.   Signature      :  Char;
  317.   Version        :  Char;
  318.   Encoding       :  Char;
  319.   BitsPerPixel   :  Char;
  320.   XMin,YMin,
  321.   XMax,YMax      :  Integer;
  322.   HRes,VRes      :  Integer;
  323.   Palette        :  Array [0..47] of Byte;
  324.   Reserved       :  Char;
  325.   Planes         :  Char;
  326.   BytesPerLine   :  Integer;
  327.   PaletteType    :  Integer;
  328.   Filler         :  Array [0..57] of Byte;
  329. end;
  330.  
  331.